package com.ruoyi.locksApi.service;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.locksApi.domain.dto.PhoneLoginDTO;

import java.util.List;
import java.util.Map;

public interface PhoneLoginService {
    /**
     * 发送手机验证码
     *
     * @param phoneNumber 手机号
     * @return 是否发送成功
     */
    boolean sendVerificationCode(String phoneNumber);
    
    /**
     * 验证手机验证码
     *
     * @param phoneNumber 手机号
     * @param code 验证码
     * @return 是否验证通过
     */
    boolean verifyCode(String phoneNumber, String code);

    /**
     * 手机号登录
     */
    AjaxResult phoneLogin(PhoneLoginDTO loginDTO);
    
    /**
     * 获取设备信息
     */
    AjaxResult getDeviceInfo(Long homeId);
    
    /**
     * 根据MAC地址获取门锁钥匙
     * 
     * @param mac 门锁MAC地址
     * @param userId 用户ID
     * @return 钥匙列表
     */
    AjaxResult getDeviceKeys(String mac, Long userId);
    
    /**
     * 提交故障报告
     * 
     * @param waringType 故障类型
     * @param remark 故障描述
     * @param remark2 附加信息
     * @param img 图片URL
     * @param userId 用户ID
     * @param mac 设备MAC地址
     * @param homeId 房间ID
     * @return 操作结果
     */
    AjaxResult submitFaultReport(String waringType, String remark, String remark2, String img, Long userId, String mac, Long homeId);
    
    /**
     * 查询用户的故障报告列表
     * 
     * @param userId 用户ID
     * @param pageNum 页码
     * @param pageSize 每页记录数
     * @return 故障报告列表
     */
    AjaxResult getFaultReportList(Long userId, Integer pageNum, Integer pageSize);
    
    /**
     * 获取故障报告详情
     * 
     * @param id 故障报告ID
     * @param userId 用户ID
     * @return 故障报告详情
     */
    AjaxResult getFaultReportDetail(Long id, Long userId);
    
    /**
     * 修改故障报告
     * 
     * @param id 故障报告ID
     * @param waringType 故障类型
     * @param remark 故障描述
     * @param remark2 附加信息
     * @param img 图片URL
     * @param userId 用户ID
     * @return 操作结果
     */
    AjaxResult updateFaultReport(Long id, String waringType, String remark, String remark2, String img, Long userId);
    
    /**
     * 根据用户ID查询用户基本信息
     *
     * @param userId 用户ID
     * @return 用户基本信息
     */
    AjaxResult getUserInfoById(Long userId);
    
    /**
     * 根据住宅ID查询小区公告
     *
     * @param homeId 住宅ID
     * @return 公告列表
     */
    List<Map<String, Object>> getNotificationsByHomeId(Long homeId);
    
    /**
     * 获取公告详情
     *
     * @param id 公告ID
     * @return 公告详情
     */
    Map<String, Object> getNotificationDetail(String id);
    
    /**
     * 根据住宅ID获取打卡地点信息
     *
     * @param homeId 住宅ID
     * @return 打卡地点的经纬度信息
     */
    Map<String, Object> getCheckinLocationByHomeId(Long homeId);
    
    /**
     * 根据住宅ID查询开门记录
     *
     * @param homeId 住宅ID
     * @param dateStr 日期字符串，格式：yyyy-MM-dd（可选）
     * @return 开门记录列表
     */
    List<Map<String, Object>> getOpenLockRecords(Long homeId, String dateStr);
} 